package br.com.almoxarifadoporttek.persistence;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.almoxarifadoporttek.util.HibernateUtil;
import br.com.almoxarifadoporttek.model.Produto;;

public class ProdutoDAO implements IProdutoDAO
{

	@Override
	public void save(Produto produto) 
	{
		Session session = null;
		try
		{
			session= HibernateUtil.getSession().openSession();
		
			Transaction t = session.beginTransaction();
			session.save(produto);
			t.commit();
		}
			catch(Exception erro)
			{			
				try
				{			
					if(session != null)
					{
						if(session.getTransaction().isActive())
							session.getTransaction().rollback();				
				}				
			} catch (Exception e) 
			{}		
		}		
		finally 
		{
			session.close();	
		}
		
	}

	@Override
	public List<Produto> list() 
	{
		
		Session session = null;
		
		try
		{
			session = HibernateUtil.getSession().openSession();
			Transaction t = session.beginTransaction();
			List<Produto> lista =  session.createCriteria(Produto.class).list();
				
			
			t.commit();
			return lista;
			
		}
		catch(Exception erro)
		{
			
			try
			{			
				if(session != null)
				{
					if(session.getTransaction().isActive())
						session.getTransaction().rollback();
				}
			
				
			}
				catch (Exception e) 
				{}
			
			return null;			
		}
		
		finally 
		{
			session.close();		
		}	
		
	}

	@Override
	public void delete(Produto produto) 
	{
		Session session = null;
		try
		{
			session= HibernateUtil.getSession().openSession();
		
			Transaction t = session.beginTransaction();
			session.delete(produto);
			t.commit();
			
		}
		catch(Exception erro)
		{	
			
			System.out.println("erro1.: "+erro);
			try
			{			
				if(session != null)
				{
					if(session.getTransaction().isActive())
						session.getTransaction().rollback();				
				}				
			} 
			catch (Exception e) 
			{}		
		}		
		finally 
		{
			session.close();	
		}

	}

	@Override
	public void update(Produto produto) 
	{
		Session session = null;
		try
		{
			session= HibernateUtil.getSession().openSession();
		
			Transaction t = session.beginTransaction();
			session.update(produto);
			t.commit();
			
		}
		catch(Exception erro)
		{			
			try
			{			
				if(session != null)
				{
					if(session.getTransaction().isActive())
						session.getTransaction().rollback();				
				}				
			} 
			catch (Exception e) 
			{}		
		}		
		finally 
		{
			session.close();	
		}
			
	}

	@Override
	public Produto getProduto(long id)
	{
		
		Session session = null;
		try
		{
			session = HibernateUtil.getSession().openSession();			
			Produto produto = (Produto) session.get(Produto.class, id);		
			
			return produto;
		}finally 
		{
			
			try
			{			
				if(session != null)
				{
						session.close();
				}
			
				
			} catch (Exception e) {
				
			}
		
		}
			
		
	}

		
}
